/*
 * Copyright (c) 2018-2999 湖南洛云网络科技有限公司 All rights reserved.
 *
 * https://www.gz-yami.com/
 *
 */

package com.yami.shop.dao;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yami.shop.bean.dto.PageAnalysisDto;
import com.yami.shop.bean.model.FlowPageAnalysis;
import com.yami.shop.bean.param.FlowAnalysisParam;
import com.yami.shop.bean.param.ProdAnalysisSurveyParam;
import com.yami.shop.bean.param.ProdEffectRespParam;
import com.yami.shop.bean.param.VisitorTopParam;
import com.yami.shop.common.util.PageParam;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 流量分析—页面数据统计表
 *
 * @author YXF
 * @date 2020-07-14 11:26:35
 */
public interface FlowPageAnalysisMapper extends BaseMapper<FlowPageAnalysis> {

    /**
     * 根据商品分析概况参数获取商品浏览量
     *
     * @param param
     * @return
     */
    Integer countVisitProdInfoNum(@Param("param") ProdAnalysisSurveyParam param);

    /**
     * 根据商品分析概况参数获取商品曝光数
     *
     * @param param 商品分析概况参数
     * @return 商品曝光数
     */
    Integer countProdExposeNum(@Param("param") ProdAnalysisSurveyParam param);

    /**
     * 根据商品分析概况参数获取获取商品详情页浏览数大于0的商品数
     *
     * @param param 商品分析概况参数
     * @return 商品详情页浏览数大于0的商品数
     */
    Integer countVisitProdNum(@Param("param") ProdAnalysisSurveyParam param);

    /**
     * 根据商品分析概况参数获取商品访客数
     *
     * @param param 商品分析概况参数
     * @return 商品访客数
     */
    Integer countProdVisitorNum(@Param("param") ProdAnalysisSurveyParam param);

    /**
     * 获取访客数TOP
     *
     * @param pageVisitor
     * @param param
     * @param dbLang
     * @return
     */
    IPage<VisitorTopParam> getVisitorTop(@Param("pageVisitor") IPage<FlowPageAnalysis> pageVisitor, @Param("param") ProdAnalysisSurveyParam param, @Param("dbLang") Integer dbLang);

    /**
     * 根据商品ID与时间范围获取商品浏览量
     *
     * @param prodId    商品ID
     * @param startTime 起始时间
     * @param endTime   结束时间
     * @return 商品浏览量
     */
    Integer countProdExposeNumByParam(@Param("prodId") Long prodId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 根据商品ID与时间范围获取商品曝光量
     *
     * @param prodId    商品ID
     * @param startTime 起始时间
     * @param endTime   结束时间
     * @return 商品曝光量
     */
    Integer countProdExposePersonNum(@Param("prodId") Long prodId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 根据商品ID与时间范围获取商品访客数
     *
     * @param prodId    商品ID
     * @param startTime 起始时间
     * @param endTime   结束时间
     * @return 商品访客数
     */
    Integer countProdVisitorNumByProdId(@Param("prodId") Long prodId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 分页获取流量分析页面数据统计表信息
     *
     * @param page              分页参数
     * @param flowAnalysisParam 条件参数
     * @return 分页结果
     */
    PageParam<PageAnalysisDto> getPageOrProdAnalysis(PageParam<PageAnalysisDto> page, @Param("flowAnalysisParam") FlowAnalysisParam flowAnalysisParam);

//    Integer countProdAddNum(@Param("prodId") Long prodId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
//
//    Integer countprodAddPersonNum(@Param("prodId") Long prodId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
//

    /**
     * 统计时间内，添加商品进入购物车的商品件数
     *
     * @param param 商品分析概况参数
     * @return 商品进入购物车的商品件数
     */
    Integer countAddCartProdNum(@Param("param") ProdAnalysisSurveyParam param);
//

    /**
     * 统计时间内，分享访问商品数
     *
     * @param param 商品分析概况参数
     * @return 分享访问商品数
     */
    Integer countShareVisitNum(@Param("param") ProdAnalysisSurveyParam param);

    /**
     * 根据商品ID与日期范围获取
     *
     * @param prodIds
     * @param startTime
     * @param endTime
     * @return
     */
    List<ProdEffectRespParam> getProdEffectByDateAndProdIds(@Param("prodIds") List<Long> prodIds, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 根据时间及店铺id，获取prodId
     * @param startTime
     * @param endTime
     * @param shopId
     * @return
     */
    List<String> getProdIdsByTime(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("shopId") Long shopId);
}
